package control;

import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.table.DefaultTableModel;

import model.Chamado;
import model.Equipamento;
import model.Setor;
import model.Usuario;
import model.dao.IChamadoDAO;
import model.dao.IEquipamentoDAO;
import model.dao.ISetorDAO;
import model.dao.IUsuarioDAO;
//TODO Singleton : Mauricio
public class ControllersDaos implements IEquipamentoDAO,IChamadoDAO,ISetorDAO,IUsuarioDAO {
	
	private static ControllersDaos instance = null;
	private int repositorioUsuarioAtual;
	//todos os controladores necessários para aplicação
	private SetorControlador objSetorControlador;
	private EquipamentoControlador objEquipamentoControlador;
	private UsuarioControlador objUsuarioControlador;
	private ChamadoControlador objChamadoControlador;
	
	private ControllersDaos (int repositorio){
		this.repositorioUsuarioAtual = repositorio;
		objSetorControlador          = new SetorControlador(repositorioUsuarioAtual);
		objEquipamentoControlador    = new EquipamentoControlador(repositorioUsuarioAtual);
		objUsuarioControlador        = new UsuarioControlador(repositorioUsuarioAtual);
		objChamadoControlador        = new ChamadoControlador(repositorioUsuarioAtual);
	}
	
	public static ControllersDaos getInstance(int repositorio) {
		if (ControllersDaos.instance == null) {
			ControllersDaos.instance = new ControllersDaos(repositorio);
		}
		return ControllersDaos.instance;
	}

	@Override
	public void inserirEquipamento(Equipamento equip)
			throws ClassNotFoundException, SQLException {
		objEquipamentoControlador.inserirEquipamento(equip);
	}

	@Override
	public void deletarEquipamento(Equipamento equip)
			throws ClassNotFoundException, SQLException {
		objEquipamentoControlador.deletarEquipamento(equip);
		
	}

	@Override
	public ArrayList<Equipamento> listarEquipamento()
			throws ClassNotFoundException, SQLException {
		
		return objEquipamentoControlador.listarEquipamento();
	}

	@Override
	public void alterarEquipamento(Equipamento equip)
			throws ClassNotFoundException, SQLException {
		objEquipamentoControlador.alterarEquipamento(equip);
		
	}

	@Override
	public void inserirUsuario(Usuario usuario) throws ClassNotFoundException,
			SQLException {
		objUsuarioControlador.inserirUsuario(usuario);
	}

	@Override
	public void deletarUsuario(Usuario usuario) throws ClassNotFoundException,
			SQLException {
		objUsuarioControlador.deletarUsuario(usuario);
	}

	@Override
	public ArrayList<Usuario> listarUsuario() throws SQLException,
			ClassNotFoundException {
		return objUsuarioControlador.listarUsuario();
	}

	@Override
	public void alterarUsuario(Usuario usuario) throws ClassNotFoundException,
			SQLException {
		objUsuarioControlador.alterarUsuario(usuario);
	}

	@Override
	public int proximoIdUsuario() throws ClassNotFoundException, SQLException {
		return objUsuarioControlador.proximoIdUsuario();
	}

	@Override
	public void inserirSetor(Setor setor) throws ClassNotFoundException,
			SQLException {
		objSetorControlador.inserirSetor(setor);
		
	}

	@Override
	public void deletarSetor(Setor setor) throws ClassNotFoundException,
			SQLException {
		objSetorControlador.deletarSetor(setor);
		
	}

	@Override
	public ArrayList<Setor> listarSetor() throws ClassNotFoundException,
			SQLException {
		return objSetorControlador.listarSetor();
	}

	@Override
	public void alterarSetor(Setor setor) throws ClassNotFoundException,
			SQLException {
		objSetorControlador.alterarSetor(setor);
		
	}

	@Override
	public int proximoIdSetor() throws ClassNotFoundException, SQLException {
		return objSetorControlador.proximoIdSetor();
	}

	@Override
	public void inserirChamado(Chamado chamado) throws ClassNotFoundException,
			SQLException {
		objChamadoControlador.inserirChamado(chamado);
	}

	@Override
	public void deletarChamado(Chamado chamado) throws ClassNotFoundException,
			SQLException {
		objChamadoControlador.deletarChamado(chamado);
		
	}

	@Override
	public ArrayList<Chamado> listarChamado() throws ClassNotFoundException,
			SQLException {
		return objChamadoControlador.listarChamado();
	}

	@Override
	public void alterarChamado(Chamado chamado) throws ClassNotFoundException,
			SQLException {
		objChamadoControlador.alterarChamado(chamado);
		
	}

	@Override
	public void listChamado(DefaultTableModel modelo)
			throws ClassNotFoundException, SQLException {
		objChamadoControlador.listChamado(modelo);
	}

	@Override
	public int proximoIdChamado() throws ClassNotFoundException, SQLException {
		return objChamadoControlador.proximoIdChamado();
	}

}
